import { LockOutlined, UserOutlined } from '@ant-design/icons';
import { Button, Form, Input, Card, Space, Checkbox } from 'antd';
import React, { useEffect, useState } from 'react';

const Index = () => {
  // 得到了一个form实例
  // form实例下面有很多方法
  const [form] = Form.useForm();

  // 这里是用来做强制更新
  const [, forceUpdate] = useState({});
  // To disable submit button at the beginning.
  useEffect(() => {
    forceUpdate({});
  }, []);

  // const onFinish = (values: any) => {
  //   console.log('Finish:', values);
  // };

  const onFinish = (values: any) => {
    console.log('Received values of form: ', values);
  };

  const fn = () => {
    // form是一个对象，里面有很多方法
    //! getFieldsValue()可以直接获取到整个表单的值
    // console.log(form.getFieldsValue());

    //! getFieldValue("xx")获取到某一个字段的值
    // console.log(form.getFieldValue('username'));

    // isFieldsTouched()判断里面的表单控件是否被操作过
    // 传入true，表示判断全部
    // console.log(form.isFieldsTouched());
    // console.log(form.isFieldsTouched(true));
    // isFieldTouched()判断某一个字段是否被操作过
    // console.log(form.isFieldTouched('username'));
    // isFieldValidating表示是否正在被校验
    // console.log(form.isFieldValidating('username'));

    //! resetFields()用于清空表单，来做重置
    // form.resetFields();

    // scrollToField用于滚动到某个位置
    // setFieldValue来修改表单个单控件的值
    // form.setFieldValue('username', 'zhangsan');

    //! setFieldsValue用来修改整个表单的值
    // form.setFieldsValue({ username: 'lisi', password: '123' });
    // console.log(form.getFieldsValue());

    //! validateFields判断是否通过了验证，返回promise对象
    //! 如果成功可以得到输入的对象，否则是失败的结果
    form
      .validateFields()
      .then((res) => {
        console.log('success', res);
      })
      .catch((err) => {
        return err;
      });

    // console.log(form.getFieldError('username'));
    // console.log(form.getFieldsError());
    // console.log(form.getFieldInstance('username'));
  };

  const [form2] = Form.useForm();
  // const [values, setValues] = useState({});
  const edit = () => {
    // setValues({ username: 'zhangsan' });
    form2.setFieldsValue({ username: 'zhangsan' });
  };

  return (
    <Space direction="vertical" style={{ display: 'flex' }}>
      <Card title="登录行内表单">
        <Form
          form={form}
          name="horizontal_login"
          // 表单时横着排的
          layout="inline"
          // 里面的submit按钮点击的时候触发
          // 这个函数可以直接得到对象，不需要使用受控组件了
          // onFinish={onFinish}
        >
          <Form.Item
            // item组件里面的表单控件的值会绑定到最后的对象的这个name的属性上
            name="username"
            // rules是用来做表单验证的
            rules={[
              { required: true, message: 'Please input your username!' },
              // { max: 6, message: '超过6位了' },
              {
                pattern: /^[1][3,4,5,6.7,8,9][0-9]{9}$/,
                message: '请输入正确的手机号',
              },
            ]}
          >
            <Input
              // prefix是用来做前面的小图标
              prefix={<UserOutlined className="site-form-item-icon" />}
              placeholder="Username"
            />
          </Form.Item>
          <Form.Item
            name="password"
            rules={[{ required: true, message: 'Please input your password!' }]}
          >
            <Input
              prefix={<LockOutlined className="site-form-item-icon" />}
              type="password"
              placeholder="Password"
            />
          </Form.Item>
          {/* <Form.Item shouldUpdate>
          <Button type="primary" htmlType="submit">
            Log in
          </Button>
        </Form.Item> */}
        </Form>

        {/* 如果button出现在了表单组件的外面，那么就不会触发onFinish */}
        {/* 只能通过form实例来获取这个对象 */}
        <Button type="primary" onClick={fn}>
          Log in
        </Button>
      </Card>

      <Card title="登录水平表单">
        <Form
          form={form2}
          name="normal_login"
          className="login-form"
          style={{ width: 250 }}
          // initialValues表示表单的默认值
          initialValues={{}}
          onFinish={onFinish}
        >
          <Form.Item
            name="username"
            rules={[{ required: true, message: 'Please input your Username!' }]}
          >
            <Input
              prefix={<UserOutlined className="site-form-item-icon" />}
              placeholder="Username"
            />
          </Form.Item>
          <Form.Item
            name="password"
            rules={[{ required: true, message: 'Please input your Password!' }]}
          >
            <Input
              prefix={<LockOutlined className="site-form-item-icon" />}
              type="password"
              placeholder="Password"
            />
          </Form.Item>
          <Form.Item>
            <Form.Item name="remember" valuePropName="checked" noStyle>
              <Checkbox>Remember me</Checkbox>
            </Form.Item>

            <a className="login-form-forgot" href="">
              Forgot password
            </a>
          </Form.Item>

          <Form.Item>
            <Button
              type="primary"
              htmlType="submit"
              className="login-form-button"
            >
              Log in
            </Button>
            Or <a href="">register now!</a>
          </Form.Item>
        </Form>
        <Button onClick={edit}>修改</Button>
      </Card>
    </Space>
  );
};

export default Index;
